<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<script>
			// 此方法比translateDataToTree效率高
			function toTree(data) {
			  let obj = {}, // 使用对象重新存储数据
			    res = [], // 存储最后结果
			    len = data.length
			 
			  // 遍历原始数据data，构造obj数据，键名为id，值为数据
			  for (let i = 0; i < len; i++) {
			    obj[data[i]['id']] = data[i]
			  }
			 
			  // 遍历原始数据
			  for (let j = 0; j < len; j++) {
			    let list = data[j]
			    // 通过每条数据的 pid 去obj中查询
			    let parentList = obj[list['parentId']]
			 
			    if (parentList) {
			      // 根据 pid 找到的是父节点，list是子节点，
			      if (!parentList['children']) {
			        parentList['children'] = []
			      }
			      // 将子节点插入 父节点的 children 字段中
			      parentList['children'].push(list)
			    } else {
			      // pid 找不到对应值，说明是根结点，直接插到根数组中
			      res.push(list)
			    }
			  }
			 
			  return res
			}
			
			let originData = [
				 
				{ id: 2, name: '1-1', parentId: 1 },
			
				{ id: 3, name: '1-1-1', parentId: 2 },
			
				{ id: 4, name: '1-2', parentId: 1 },
			
				{ id: 5, name: '1-2-2', parentId: 4 },
			
				{ id: 6, name: '1-1-1-1', parentId: 3 },
				
				{ id: 1, name: '1', },
				{ id: 7, name: '2', },
			]
			
			console.log(toTree(originData));
			
			var data = toTree(originData);
			
			
			
			var arr = [];
			function loopTree(data){
			    data.forEach(function(el,index){
			        arr.push(el);
			        if(el.children){
			            loopTree(el.children);
			        }
			    })
			}
			loopTree(data);
			
			console.log(arr);
			
		</script>
	</body>
</html>
